﻿<?xml version="1.0" encoding="utf-8"?>

<xsd:schema targetNamespace="http://metalx.org/Program" xmlns:p="http://metalx.org/Program" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" elementFormDefault="qualified">	
	<xsd:element name="scope">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:any minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
		<!--<xsd:key name="scopeLabelID">
			<xsd:selector xpath="p:label"/>
			<xsd:field xpath="@id"/>
		</xsd:key>-->
	</xsd:element>

	<xsd:element name="binary">
		<xsd:simpleType>
			<xsd:restriction base="xsd:string">
				<xsd:pattern value="[01]*"/>
			</xsd:restriction>
		</xsd:simpleType>
	</xsd:element>
	<xsd:element name="hex" type="xsd:hexBinary"/>
	<xsd:element name="byte" type="xsd:unsignedByte"/>
	<xsd:element name="sbyte" type="xsd:byte"/>
	<xsd:element name="short" type="xsd:short"/>
	<xsd:element name="ushort" type="xsd:unsignedShort"/>
	<xsd:element name="int" type="xsd:int"/>
	<xsd:element name="uint" type="xsd:unsignedInt"/>
	<xsd:element name="long" type="xsd:long"/>
	<xsd:element name="ulong" type="xsd:unsignedLong"/>
	<xsd:element name="float" type="xsd:float"/>
	<xsd:element name="double" type="xsd:double"/>
	<xsd:element name="real" type="xsd:double"/>
	<xsd:element name="decimal" type="xsd:decimal"/>
	<xsd:element name="string" type="xsd:string"/>
	<xsd:element name="empty">
		<xsd:complexType>
			<xsd:attribute name="length"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="label">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:any minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
			<xsd:attribute name="id" type="xsd:ID"/>
			<xsd:attribute name="segment" type="xsd:hexBinary"/>
			<xsd:attribute name="offset" type="xsd:hexBinary"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="align">
		<xsd:complexType>
			<xsd:attribute name="bytes" type="xsd:unsignedInt"/>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="addressOf">
		<xsd:complexType>
			<xsd:attribute name="ref" type="xsd:IDREF"/>
			<xsd:attribute name="type" use="required">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value="Pointer16"/>
						<xsd:enumeration value="Absolute16"/>
						<xsd:enumeration value="Absolute32"/>
						<xsd:enumeration value="Absolute64"/>
						<xsd:enumeration value="Absolute16High8"/>
						<xsd:enumeration value="Absolute16Low8"/>
						<xsd:enumeration value="Relative8"/>
						<xsd:enumeration value="Relative16"/>
						<xsd:enumeration value="Relative24"/>
						<xsd:enumeration value="Relative32"/>
						<xsd:enumeration value="Relative64"/>
						<xsd:enumeration value="Segment16"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:attribute>
			<xsd:attribute name="offset" type="xsd:int"/>
		</xsd:complexType>
		<!--<xsd:keyref name="addressOfRef" refer="p:scopeLabelID">
			<xsd:selector xpath="."/>
			<xsd:field xpath="@ref"/>
		</xsd:keyref>-->
	</xsd:element>
</xsd:schema>
